package Server.UI;

import java.awt.BorderLayout;
import java.awt.Dimension;

import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;

/**
 * Gestisce i PanelComponent figli posizionandoli in JTabbedPane
 * @author Gruppo 6
 *
 */
public class TabComposite extends PanelComponent{
	protected JTabbedPane tabpanel;
	
	/**
	 * inizializza pannellocomponente e tabpanel
	 * @param parent
	 */
	public TabComposite(PanelComponent parent){super(parent);
		tabpanel = new JTabbedPane();
		
		tabpanel.setSize(1240,450);
		pannellocomponente = new JPanel(null);
	}
	
	/**
	 * restituisce il pannellocomponente con all'intero tabpanel
	 * @return JPanel
	 * @Override
	 */
	public JPanel createComponents() {
		tabpanel.setLocation(30, 5);
		setSize(1250, 450);
		pannellocomponente.add(tabpanel);
		return pannellocomponente;
	}
	
	/**
	 * Aggiunge il PanelComponent come figlio, aggiungendo il pannellocomponente in tab del tabPanel
	 * @param figlio
	 */
	public void add(PanelComponent figlio) {
		super.add(figlio);
		JScrollPane scrollpanetemp = new JScrollPane(figlio.createComponents());
		scrollpanetemp.setPreferredSize(new Dimension( 1240,450));
		scrollpanetemp.setSize(scrollpanetemp.getPreferredSize());
		
		tabpanel.addTab(" ",null,scrollpanetemp," ");
		//System.out.print("\ntabcomposite tab"+tabpanel.getSize());
		tabpanel.setSelectedIndex(0);
		//updateSize();
	}	
	
	/**
	 * Aggiunge il PanelComponent come figlio, aggiungendo il pannellocomponente in tab del tabPanel. 
	 * Inoltre permette di impostare il titolo del tab
	 * @param figlio
	 * @param titlo
	 */
	public void addTitle(PanelComponent figlio, String title){
		super.add(figlio);
	
		JPanel panel = new JPanel(new BorderLayout(0,0));
		panel.add(figlio.createComponents(), BorderLayout.CENTER);

		JScrollPane scrollpanetemp = new JScrollPane(figlio.createComponents());
		scrollpanetemp.setPreferredSize(new Dimension( 1240,450));
		scrollpanetemp.setSize(scrollpanetemp.getPreferredSize());
		JPanel panel2 = new JPanel(new BorderLayout(0,0));
		panel2.add(scrollpanetemp, BorderLayout.CENTER);
		panel2.setPreferredSize(new Dimension(1230, 450));
		panel2.setSize(panel2.getPreferredSize());
			
		tabpanel.addTab(title, null, panel2,title);
		tabpanel.setSelectedIndex(0);
		//tabpanel.validate();
		System.out.print("\ntabpanel"+tabpanel.getSize());//getComponentAt(0).toString());
		
	}
	
	/**
	 * imposta il titolo delle tab con indice index
	 * @param index
	 * @param title
	 */
	public void setTitle(int index, String title)
	{
		tabpanel.setTitleAt(index, title);
	}
	
	/**
	 * imposta il titolo dell'ultimo tab
	 * @param title
	 */
	public void setTitle(String title){
		tabpanel.setTitleAt(tabpanel.getTabCount()-1, title);
	}
	
	/**
	 * rimuove il figlio numero index e il tab numero index
	 * @param index	
	 * @Override
	 */
	public void remove(int index ){
		super.remove(index);
		tabpanel.remove(index);
	}
	
	/**
	 * @Override
	 */
	
	public void updateSize(){}
	
	/**
	 * imposta le dimensioni del pannellocomponente e del tabpanel
	 * @param width
	 * @param height
	 * @Override
	 * 
	 */
	public void setSize(int width, int height){
		Dimension d= new Dimension(width,height);
		super.setSize(d);
		tabpanel.setSize(d);
		tabpanel.setPreferredSize(d);
		tabpanel.setPreferredSize(d);
	}
	
	/**
	 * imposta le dimensioni del pannellocomponente e del tabpanel
	 * @param d		Dimension
	 * @Override
	 * 
	 */
	public void setSize(Dimension d){
		
		super.setSize(d);
		tabpanel.setSize(d);
		tabpanel.setPreferredSize(d);
		tabpanel.setPreferredSize(d);
	}
}
	


